En esta ocasión utilizaremos los datos de las estimaciones del ministerio de agroindustria para utilizar todo lo que aprendimos sobre el tidyverse.
library(tidyverse)
estimaciones <- read.table(file = '../datasets/Estimaciones.csv',sep=";", header = TRUE)
Hechamos un rápido vistazo a la base
head(estimaciones)
str(estimaciones)
'data.frame': 95873 obs. of 12 variables:
$ ID.Provincia : int 82 6 6 6 6 6 6 6 6 6 ...
$ Provincia : Factor w/ 23 levels "BUENOS AIRES",..: 20 1 1 1 1 1 1 1 1 1 ...
$ ID.Departamento : int 126 854 854 14 14 14 14 14 14 14 ...
$ Departamento : Factor w/ 568 levels "1 DE MAYO","12 DE OCTUBRE",..: 499 4 4 7 7 7 7 7 7 7 ...
$ Id.Cultivo : int 0 1 1 1 1 1 1 1 1 1 ...
$ Cultivo : Factor w/ 28 levels "","Ajo","Algodón",..: 1 2 2 2 2 2 2 2 2 2 ...
$ ID.Campaña : int 41 1 2 1 2 3 4 5 6 7 ...
$ Campana : Factor w/ 50 levels "1969/70","1970/71",..: 41 1 2 1 2 3 4 5 6 7 ...
$ Sup..Sembrada..Ha. : int 0 3 1 15 10 8 8 10 15 15 ...
$ Sup..Cosechada..Ha.: int 0 3 1 15 10 8 8 10 15 15 ...
$ Producción..Tn. : int 0 10 3 82 55 44 69 85 126 81 ...
$ Rendimiento..Kg.Ha.: int 0 3333 3000 5467 5500 5500 8625 8500 8400 5400 ...
summary(estimaciones)
ID.Provincia Provincia ID.Departamento
Min. : 6.00 BUENOS AIRES:35876 Min. : 0.0
1st Qu.: 6.00 SANTA FE : 6853 1st Qu.: 49.0
Median :22.00 CHACO : 6631 Median :105.0
Mean :32.17 CORDOBA : 5979 Mean :207.2
3rd Qu.:54.00 ENTRE RIOS : 4708 3rd Qu.:277.0
Max. :94.00 MISIONES : 4636 Max. :882.0
(Other) :31190
Departamento Id.Cultivo Cultivo
CAPITAL : 1499 Min. : 0.00 Trigo total:11922
9 DE JULIO: 1069 1st Qu.:12.00 Sorgo :10749
25 DE MAYO: 1040 Median :22.00 Soja total :10487
COLON : 939 Mean :19.12 Girasol : 9638
CHACABUCO : 938 3rd Qu.:26.00 Maíz : 6213
SAN PEDRO : 899 Max. :35.00 Centeno : 5456
(Other) :89489 (Other) :41408
ID.Campaña Campana Sup..Sembrada..Ha.
Min. : 1.00 1979/80: 2865 Min. : 0
1st Qu.: 9.00 1978/79: 2844 1st Qu.: 130
Median :19.00 1977/78: 2787 Median : 1200
Mean :21.74 1973/74: 2714 Mean : 11361
3rd Qu.:33.00 1976/77: 2707 3rd Qu.: 7600
Max. :50.00 1980/81: 2698 Max. :1096100
(Other):79258
Sup..Cosechada..Ha. Producción..Tn. Rendimiento..Kg.Ha.
Min. : 0 Min. : 0 Min. : 0
1st Qu.: 70 1st Qu.: 177 1st Qu.: 1000
Median : 820 Median : 1750 Median : 1829
Mean : 10235 Mean : 25939 Mean : 3202
3rd Qu.: 6000 3rd Qu.: 13000 3rd Qu.: 3500
Max. :1066100 Max. :2637503 Max. :300000
La columna cultivo es de tipo factor con 28 niveles. Queremos armar nuestro dataset con solamente 3 cultivos:Soja, Trigo y Maíz
Necesitamos filtrar los datos y renombrar la nueva base con la que vamos a trabajar. Tengan en cuenta que el filtro tiene que estar escrito de la misma manera que se encuentra el registro.
Base <- estimaciones %>%
filter(Cultivo == "Soja total" | Cultivo == "Trigo total" | Cultivo == "Maíz")
head(Base)
El Rendimiento se encuentra en kg/ha, para una mayor facilidad de lectura queremos modificar la columna a (qq/ha). Luego le cambiaremos el nombre a todas las columnas de medidas para incluir las unidades entre paréntesis.
Base$Rendimiento..Kg.Ha. = Base$Rendimiento..Kg.Ha./100
Base <- Base %>%
rename("Rinde(qq/ha)" = Rendimiento..Kg.Ha.,
"Sembrada(ha)" = Sup..Sembrada..Ha.,
"Cosechada(ha)" = Sup..Cosechada..Ha.,
"Produccion(tn)" = Producción..Tn.)
head(Base)
Reescribir la base con las siguientes columnas y respetando el orden: Provincia, Departamento, Cultivo, Campana, Sembrada(ha), Cosechada(ha), Rinde(qq/ha) y Produccion(tn).
Base <- Base %>%
select(Provincia,Departamento,Cultivo,Campana,
`Sembrada(ha)`,`Cosechada(ha)`,`Rinde(qq/ha)`,
`Produccion(tn)`)
head(Base)
Calcular el promedio, el máximo y el mínimo del rinde de cada cultivo y provincia. Presentar los datos ordenados según el rinde promedio.
Necesitamos agrupar los casos de acuerdo a su tipo de cultivo y provincia, y calculamos los indicadores agregados solicitados. Luego, ordenamos los resultados.
ejercicio4 <- Base %>%
group_by(Provincia, Cultivo) %>%
summarise(Rinde_Prom = mean(`Rinde(qq/ha)`),
Rinde_Max = max(`Rinde(qq/ha)`),
Rinde_Min = min(`Rinde(qq/ha)`)) %>%
arrange(Rinde_Prom)
ejercicio4
No lo vimos en la clase, pero muchas veces en las bases se utilizan 0 u otros valores cuando no deberia haber dato. En ese caso utilizaremos el siguiente código para reemplazarlos por NA´s. data[data == 0] <- NA
*Tip:* Para reemplazar na con 0 realizar el siguiente código: data[is.na(data)] <- 0
Se desea generar un nuevo dataset que incorpore toda la base de datos y que adicionalmente se incorpore el rinde promedio, mínimo y máximo por cultivo y provincia (previamente calculado en el punto anterior).
ejercicio5 <- left_join(Base, ejercicio4, by = c("Provincia", "Cultivo"))
head(ejercicio5)
Generar una nueva variable en el dataset ejercicio2 que contenga una variable que tome valor “ALTO” cuando el rinde supera el valor promedio, “BAJO” cuando no e “IGUAL” cuando sean iguales. Luego se desea conocer cuáles provincias tuvieron un rinde superior al promedio para el cultivo de soja en la campaña 2018/19.
ejercicio6 <- ejercicio5 %>%
mutate(Comparativo = case_when(`Rinde(qq/ha)` > Rinde_Prom ~ "ALTO",
`Rinde(qq/ha)` > Rinde_Prom ~ "BAJO",
TRUE ~ "IGUAL")) %>%
filter(Campana == "2018/19" & Comparativo == "ALTO" & Cultivo=="Soja total") %>%
group_by(Provincia) %>%
summarise()
ejercicio6
Presentar los datos del ejercicio5 de forma tal que Rinde(qq/ha), Rinde_Max, Rinde_Min y Rinde_Prom sean valores de una variable llamada indicador, y los valores se encuentren en la variable valor. Luego seleccionar las columnas Provincia, Cultivo, Variable y Valor. Finalmente ordenarlas por Provincia.
Utilizamos gather(), porque queremos transformar los datos de un formato “horizontal” a uno “vertical”.
ejercicio7 <- ejercicio5 %>% gather(.,
key = Variables,
value = Valores,
c(7,9:11)) %>%
select(Provincia,Cultivo,Variables, Valores) %>%
arrange(Provincia)
ejercicio7